package client.tutorial;

import jp.fores.midori.client.RPCClient;
import jp.fores.midori.client.handler.BasicRPCHandler;
import jp.fores.midori.client.handler.RPCHandler;
import jp.fores.midori.client.serializer.JsonRPCSerializer;
import jp.fores.midori.client.serializer.RPCSerializer;

/**
 * 最も基本的なRPCClientの使い方のサンプルクラス。<br>
 * 動作確認用のサーバー(http://midori-rpc.appspot.com/)のCalcServiceに対してJSON-RPCを行います。<br>
 */
public class SimpleRPCClientSample {
	//==========================================================
	//メソッド

	//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
	//クラスメソッド

	/**
	 * メインメソッドです。
	 *
	 * @param args コマンドライン引数
	 * @throws Exception 例外
	 */
	public static void main(String[] args) throws Exception {
		//==========================================================
		//呼び出し先のURL
		String url = "http://midori-rpc.appspot.com/rpc/calcService.json";


		//==========================================================
		//RPCClientの準備

		//RPC形式に応じたシリアライザのインスタンスを生成
		//(JSON-RPCなので、JsonRPCSerializerを使う)
		RPCSerializer serializer = new JsonRPCSerializer();

		//使用するライブラリに応じたハンドラのインスタンスを生成
		//(Java標準ライブラリを使いたいので、BasicRPCHandlerを使う)
		RPCHandler handler = new BasicRPCHandler();

		//シリアライザとハンドラを元にして、RPCClientのインスタンスを生成
		RPCClient rpcClient = new RPCClient(serializer, handler);


		//==========================================================
		//RPCの実行

		//RPCで「addition」メソッドを呼び出す
		//(123, 345は「addition」メソッドに渡す引数)
		Object result = rpcClient.remoteCall(url, "addition", 123, 345);

		//結果の出力
		System.out.println(result);
	}
}
